%macro rspmeans(indata=, out=, group=, var=);
proc sort data=&indata out=rspmeanstmp; by &group; run;
proc means data=rspmeanstmp;
by &group;
var &var;
output out=rspmmeans N=N mean=mean std=std median=med;
proc means data=rspmeanstmp;
var &var;
output out=rspallmeans mean=mean;
run;
proc sql;
create table &out as
select (i.%trim(%left(&var))-m.mean+a.mean) as &var, %selectvar(indata=rspmeanstmp, dalias=i, except=&var)
from rspmeanstmp as i, rspmmeans as m, rspallmeans as a
where i.%trim(%left(&group))=m.%trim(%left(&group));
drop table rspmeanstmp; drop table rspmmeans; drop table rspallmeans;
quit;
%mend rspmeans;